#pragma warning(disable:4996)
#include<stdio.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
int CheckRange() {
	int range;
	while (1) {
		printf("请输入数据范围(最大值为0~500)>>");
		scanf("%d", &range);
		if (range > 0 && range <= 500)
			return range;
		else {
			printf("范围无效，重新输入!\n");
		}
	}
}
void ChenkMark(int mark) {
	if (mark > 0)
		printf("本次成绩:%d\n", mark);
	else
		printf("本次成绩:0\n");
	if (mark == 100)
		printf("恭喜获得满分！太厉害了!\n");
	else if (mark >= 90)
		printf("还不错呦，再加把劲，争取满分！\n");
	else
		printf("再接再厉啊,少年!\n");
	return;
}

void AddTest(int times) {
	int x, y, mark, range;//随机数x,y ,分数
	mark = 0;
	//range以内的加减法
	range = CheckRange();
	while (times < 10) {	
		x = rand() % range;
		y = rand() % range;
		int answer;
		//保证计算结果在0~500（包括边界）
		if (x + y <= 500 && x + y >= 0)
			times++;
		else
			continue;
		printf("第%d题:  %d + %d = ",times, x, y);
		scanf("%d", &answer);
		if (answer == x + y){
			printf("答案正确!");
			mark += 10;//答对+10分
			printf("   mark: %d\n",mark);
		}
		else{
			printf("答案错误!   正确答案：%d", x + y);
			if (mark >= 10)
				mark -= 10;//答错-10分
			else
				mark = 0;
			printf("   mark: %d\n", mark);
		}
	}
	ChenkMark(mark);
	return;
}

void SubTest(int times) {
	int x, y, mark, range;//随机数x,y ,分数,题数,范围
	mark = 0;
	//range以内的加减法
	range = CheckRange();
	while (times < 10) {
		x = rand() % range;
		y = rand() % range;
		int answer;
		//保证计算结果在0~500（包括边界）
		if (x - y <= 500 && x - y >= 0)
			times++;
		else
			continue;
		printf("第%d题:  %d - %d = ", times, x, y);
		scanf("%d", &answer);
		if (answer == x - y){
			mark += 10;//答对+10分
			printf("答案正确!");
			printf("   mark: %d\n", mark);
		}
		else{
			printf("答案错误!   正确答案：%d", x - y);
			if (mark >= 10)
				mark -= 10;//答错-10分
			else
				mark = 0;
			printf("   mark: %d\n", mark);
		}
	}
	ChenkMark(mark);
	return;
}


void AddSubTest(int times) {
	int x, y, mark, range;//随机数x,y ,分数
	mark = 0;
	//range以内的加减法
	range = CheckRange();
		while (times < 10) {
			x = rand() % range;
			y = rand() % range;
			int answer;
			//随机数x为偶数-》加法
			if (x % 2 == 0 && x + y <= 500 && x + y >= 0) {
				times++;
				printf("第%d题:  %d + %d = ", times, x, y);
				scanf("%d", &answer);
				if (answer == x + y) {
					printf("答案正确!");
					mark += 10;//答对+10分
					printf("   mark: %d\n", mark);
				}
				else {
					printf("答案错误!   正确答案：%d", x + y);
					if (mark >= 10)
						mark -= 10;//答错-10分
					else
						mark = 0;
					printf("   mark: %d\n", mark);
				}
			}
			//随机数x为奇数-》减法
			else if (x % 2 == 1 && x - y <= 500 && x - y >= 0) {
				times++;
				printf("第%d题:  %d - %d = ", times, x, y);
				scanf("%d", &answer);
				if (answer == x - y) {
					printf("答案正确!");
					mark += 10;//答对+10分
					printf("   mark: %d\n", mark);
				}
				else {
					printf("答案错误!   正确答案：%d", x - y);
					if (mark >= 10)
						mark -= 10;//答错-10分
					else
						mark = 0;
					printf("   mark: %d\n", mark);
				}
			}
			else
				continue;
		}
		ChenkMark(mark);
		return;
}

void Menu() {
	printf("********   ! hello !  *********\n");
	printf("*   欢迎来到加减法出题系统！  *\n");
	printf("**** 1:加法     2:减法 ********\n");
	printf("*****3:随机     0:退出 ********\n");
	return;
}

int main() {	
	int select, count;
	count = 0;
	srand((unsigned int)time(NULL));//随机数种子设置
	do{
		//刷屏前睡眠0.5s
		if (count)
			Sleep(2000);
		//每次循环进行刷屏
		system("cls");
		Menu();//菜单
		count = 1;//第一次不进行睡眠，以后每次都进行
		printf("请输入选项>>");
		scanf("%d", &select);
		switch (select) {
		case 1:
			printf("加法测试!\n");
			AddTest(0);
			break;
		case 2:
			printf("减法测试!\n");
			SubTest(0);
			break;
		case 3:
			printf("加减随机!\n");
			AddSubTest(0);
			break;
		case 0:
			printf("退出系统！");
			break;
		default:
			printf("无此选项，请重新选择!\n");
			break;
		}

	} while (select);
	return 0;
}